home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
amok_lha
/
amok72.lha
/
while-Interpreter
/
Source
/
QuadTester.MOD
< prev
next >
Wrap
Text File
|
1993-08-15
|
4KB
|
138 lines
(******************************
* Programm von Dieter Seidel *
* Eingegeben am 26.11.1991 *
* Ergaenzt am 27.11.1991 *
******************************)
(* Dieses Modul laedt ein paar while-Programme in den String 'BefehlsListe' *
* und laesst daraus dann die Quadrupel-Form bestimmen. *
* Die letzten beiden Programme sind sogar sinnvoll, weshalb bei diesen *
* dann auch noch der Interpreter getestet wird. *)
IMPLEMENTATION MODULE QuadTester;
FROM InOut IMPORT WriteCard, WriteLn, WriteString;
FROM QuadLese IMPORT MaxBefehle, arrList, arrQuad;
FROM QuadBerechneQuad IMPORT BerechneQuad;
FROM QuadDrucke IMPORT Drucke;
FROM QuadInterpreter IMPORT Interpreter;
VAR Feld : ARRAY [1..30] OF CHAR;
PROCEDURE VereinigeStrings(VAR BefehlsListe : arrList; Position : CARDINAL);
VAR i : CARDINAL;
BEGIN
FOR i:=Position TO Position + 30 DO
IF i > MaxBefehle THEN
WriteLn;
WriteString("Fehler in QuadTester!!! Erhoehe MaxBefehle.");
WriteLn;
HALT;
END;
BefehlsListe[i]:=Feld[i-Position+1];
END;
END VereinigeStrings;
PROCEDURE ZeigeTest(Counter : CARDINAL; BefehlsListe : arrList);
VAR QuadListe : arrQuad;
BEGIN
WriteString("Testeingabe Nr.: ");
WriteCard(Counter,1);WriteLn;
WriteString(BefehlsListe);WriteLn;
BerechneQuad(BefehlsListe,QuadListe);
Drucke(BefehlsListe,QuadListe);
WriteLn;
END ZeigeTest;
PROCEDURE ZeigeTestInter(Counter : CARDINAL; BefehlsListe : arrList);
VAR QuadListe : arrQuad;
BEGIN
WriteString("Testeingabe Nr.: ");
WriteCard(Counter,1);WriteLn;
WriteString(BefehlsListe);WriteLn;
BerechneQuad(BefehlsListe,QuadListe);
Drucke(BefehlsListe,QuadListe);
Interpreter(QuadListe);
WriteLn;
END ZeigeTestInter;
PROCEDURE Tester() : BOOLEAN;
VAR Counter : CARDINAL;
BefehlsListe : arrList;
BEGIN
Counter:=1;
BefehlsListe:="bX1:X2;X2:2;X3:0;X4:s(X4);X5:p(X2)e";
ZeigeTest(Counter,BefehlsListe);INC(Counter);
BefehlsListe:="bwX1#X2dbX1:X2;X2:s(X2);X1:s(X1)ee";
ZeigeTest(Counter,BefehlsListe);INC(Counter);
Feld:="bwX1#X2dbwX2#X3dbX1:X2;wX3#X4d";
VereinigeStrings(BefehlsListe,1);
Feld:="wX4#X5dX1:p(X1);eX1:X2;wX1#X2d";
VereinigeStrings(BefehlsListe,31);
Feld:="X1:X8;X1:123ee";
VereinigeStrings(BefehlsListe,61);
ZeigeTest(Counter,BefehlsListe);INC(Counter);
Feld:="bwX1#X2dbwX2#X3dbX1:X2wX3#X4dw";
VereinigeStrings(BefehlsListe,1);
Feld:="X4#X5dX1:p(X1);X88:X99eX1:X2wX";
VereinigeStrings(BefehlsListe,31);
Feld:="1#X2dX1:X8X1:123ee";
VereinigeStrings(BefehlsListe,61);
ZeigeTest(Counter,BefehlsListe);INC(Counter);
Feld:="bwX1#X2dwX3#X4dbwX5#X7dX1:X2;e";
VereinigeStrings(BefehlsListe,1);
Feld:="X1:99wX1#X2dwX1#X3dwX2#X3dbX1:";
VereinigeStrings(BefehlsListe,31);
Feld:="2;wX3#X4dX1:X2;X2:1wX1#X2dbwX2";
VereinigeStrings(BefehlsListe,61);
Feld:="#X3dbwX3#X4dbX1:3;X2:7eeeX1:X7";
VereinigeStrings(BefehlsListe,91);
Feld:="ee";
VereinigeStrings(BefehlsListe,121);
ZeigeTest(Counter,BefehlsListe);INC(Counter);
WriteString("Das folgende Programm berechnet das Produkt X1:=X1*X2.");
WriteLn;
Feld:="bX1:5;X2:7;X3:0;X4:X1;X5:X2;wX";
VereinigeStrings(BefehlsListe,1);
Feld:="5#0dbX5:p(X5);X3:s(X3)eX4:p(X4";
VereinigeStrings(BefehlsListe,31);
Feld:=");wX4#0dbX5:X2;wX5#0dbX5:p(X5)";
VereinigeStrings(BefehlsListe,61);
Feld:=";X3:s(X3)eX4:p(X4)eX1:X3e";
VereinigeStrings(BefehlsListe,91);
ZeigeTestInter(Counter,BefehlsListe);INC(Counter);
WriteString("Das folgende Programm berechnet die Division mit Rest.");
WriteString(" Also 47 = X3 * 7 + X1.");
WriteLn;
Feld:="bX1:47;X2:7;X3:0;X4:X1;X4:s(X4";
VereinigeStrings(BefehlsListe,1);
Feld:=");X6:X2;wX6#0dbX4:p(X4);X6:p(X";
VereinigeStrings(BefehlsListe,31);
Feld:="6)e;wX4#0dbX6:X2;wX6#0dbX1:p(X";
VereinigeStrings(BefehlsListe,61);
Feld:="1);X6:p(X6)e;X3:s(X3);X4:X1;X4";
VereinigeStrings(BefehlsListe,91);
Feld:=":s(X4);X6:X2;wX6#0dbX4:p(X4);X";
VereinigeStrings(BefehlsListe,121);
Feld:="6:p(X6)eee";
VereinigeStrings(BefehlsListe,151);
ZeigeTestInter(Counter,BefehlsListe);INC(Counter);
RETURN TRUE; (* Es sind keine Fehler aufgetreten. *)
END Tester;
END QuadTester.